<!DOCTYPE html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test_closure</title>
  <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>
	<input type="button" value="更新" onclick="apply_submit();" />
	<script type="text/javascript">
	var name = "The Window";
　　var object = {
　　　　name : "My Object",
　　　　getNameFunc : function(){
		alert(this.name);//My Object
　　　　　　return function(){
　　　　　　　　return this.name;// The Window

　　　　　　};
　　　　}
　　};
         alert(this.name);// The Window
　　alert(object.getNameFunc()()); // The Window 参看：http://zhidao.baidu.com/link?url=wUn3I7GY7Yb50GGElQYxOihlp1PHq7cyFfpqTrWTqVWVyB94ONwqUoycmH2BJk7FaO2hLD5iOtm-cT91PHWH3DhU0jfcFblppXTB4_k1qN7
	//上面这个例子，由于getNameFunc方法中return的方法中并没有引用父方法的变量，所以实际上不是一个闭包，在执行到
	//alert(object.getNameFunc()());这句的时候，程序找到getNameFunc方法，但在return的时候，getNameFunc方法中变量就被销毁，所以return中的this.name就只能沿着作用域往上找，最后找到The Window，所以，最终输出是The Window。
	//下面这个例子则不同，由于getNameFunc的return函数中有一个that变量，这个that是getNameFunc的自由变量，所以当执行
	//alert(object.getNameFunc()());这句的时候，程序找到getNameFunc方法，但在return的时候，getNameFunc方法中变量就不能被销毁，所以return中的this.name就沿着作用域往上找，找到第一个就是My Object，所以，最终输出是My Object。
// var name = "The Window";
// 　　var object = {
// 　　　　name : "My Object",
// 　　　　getNameFunc : function(){
// 　　　　　　var that = this;
// 　　　　　　return function(){
// 	console.log(that.name);
// 　　　　　　　　return that.name;

// 　　　　　　};
// 　　　　}
// 　　};
// 　　alert(object.getNameFunc()()); // My Object
	</script>
</body>
   
	
